package entrada;

import detalhamentoEntrada.DetalhamentoEntrada;
import fornecedor.Fornecedor;
import funcionario.Funcionario;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import naturezaOperacao.NaturezaOperacao;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Entrada generated by hbm2java
 */
@Entity
@Table(name = "entrada", schema = "public")
public class Entrada implements java.io.Serializable {

    private int idEntrada;
    private Funcionario funcionario = null;
    private Fornecedor fornecedor = null;
    private NaturezaOperacao naturezaOperacao = null;
    private String numeroNota;
    private Integer tipoNota;
    private String serie;
    private String subserie;
    private Double custoFrete;
    private Date dataEmissao;
    private Date dataEntrada;
    private Integer qtdProdutosNota;
    private Double baseCalculoIcms;
    private Double valorIcms;
    private Double calculoIcmsSubstituicao;
    private Double valorIcmsSubstituicao;
    private Double valorFrete;
    private Double valorSeguro;
    private Double desconto;
    private Double outrasDespesas;
    private Double valorIpi;
    private Double totalProdutos;
    private Double totalNotas;
    private List<DetalhamentoEntrada> detalhamentoEntradas = new ArrayList<DetalhamentoEntrada>();

    public Entrada() {
    }

    public Entrada(int idEntrada) {
        this.idEntrada = idEntrada;
    }

    public Entrada(int idEntrada, Funcionario funcionario, Fornecedor fornecedor, NaturezaOperacao naturezaOperacao,
        String numeroNota, Integer tipoNota, String serie, String subserie, 
        Double custoFrete, Date dataEmissao, Date dataEntrada,
         Integer qtdProdutosNota, Double baseCalculoIcms,
        Double valorIcms, Double calculoIcmsSubstituicao, Double valorIcmsSubstituicao,
        Double valorFrete, Double valorSeguro, Double desconto, Double outrasDespesas, 
        Double valorIpi, Double totalProdutos, 
        Double totalNotas, List<DetalhamentoEntrada> detalhamentoEntradas) {
        
        this.idEntrada = idEntrada;

        this.funcionario = funcionario;
        this.fornecedor = fornecedor;
        this.naturezaOperacao = naturezaOperacao;
        this.numeroNota = numeroNota;
        this.tipoNota = tipoNota;
        this.serie = serie;
        this.subserie = subserie;
        this.custoFrete = custoFrete;
        this.dataEmissao = dataEmissao;
        this.dataEntrada = dataEntrada;
        this.qtdProdutosNota = qtdProdutosNota;
        this.baseCalculoIcms = baseCalculoIcms;
        this.valorIcms = valorIcms;
        this.calculoIcmsSubstituicao = calculoIcmsSubstituicao;
        this.valorIcmsSubstituicao = valorIcmsSubstituicao;
        this.valorFrete = valorFrete;
        this.valorSeguro = valorSeguro;
        this.desconto = desconto;
        this.outrasDespesas = outrasDespesas;
        this.valorIpi = valorIpi;
        this.totalProdutos = totalProdutos;
        this.totalNotas = totalNotas;
        this.detalhamentoEntradas = detalhamentoEntradas;
    }

    @Id
    @Column(name = "id_entrada", unique = true, nullable = false)
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    public int getIdEntrada() {
        return this.idEntrada;
    }

    public void setIdEntrada(int idEntrada) {
        this.idEntrada = idEntrada;
    }
    
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="id_funcionario")
    public Funcionario getFuncionario() {
        return this.funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_fornecedor")
    public Fornecedor getFornecedor() {
        return this.fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_natureza_operacao")
    public NaturezaOperacao getNaturezaOperacao() {
        return this.naturezaOperacao;
    }

    public void setNaturezaOperacao(NaturezaOperacao naturezaOperacao) {
        this.naturezaOperacao = naturezaOperacao;
    }

    @Column(name = "numero_nota", length = 20)
    public String getNumeroNota() {
        return this.numeroNota;
    }

    public void setNumeroNota(String numeroNota) {
        this.numeroNota = numeroNota;
    }

    @Column(name = "tipo_nota")
    public Integer getTipoNota() {
        return this.tipoNota;
    }

    public void setTipoNota(Integer tipoNota) {
        this.tipoNota = tipoNota;
    }

    @Column(name = "serie", length = 15)
    public String getSerie() {
        return this.serie;
    }

    public void setSerie(String serie) {
        this.serie = serie;
    }

    @Column(name = "subserie", length = 15)
    public String getSubserie() {
        return this.subserie;
    }

    public void setSubserie(String subserie) {
        this.subserie = subserie;
    }

    @Column(name = "custo_frete", length = 25)
    public Double getCustoFrete() {
        return this.custoFrete;
    }

    public void setCustoFrete(Double custoFrete) {
        this.custoFrete = custoFrete;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "data_emissao", length = 13)
    public Date getDataEmissao() {
        return this.dataEmissao;
    }

    public void setDataEmissao(Date dataEmissao) {
        this.dataEmissao = dataEmissao;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "data_entrada", length = 13)
    public Date getDataEntrada() {
        return this.dataEntrada;
    }

    public void setDataEntrada(Date dataEntrada) {
        this.dataEntrada = dataEntrada;
    }

    @Column(name = "qtd_produtos_nota")
    public Integer getQtdProdutosNota() {
        return this.qtdProdutosNota;
    }

    public void setQtdProdutosNota(Integer qtdProdutosNota) {
        this.qtdProdutosNota = qtdProdutosNota;
    }

    @Column(name = "base_calculo_icms", precision = 17, scale = 17)
    public Double getBaseCalculoIcms() {
        return this.baseCalculoIcms;
    }

    public void setBaseCalculoIcms(Double baseCalculoIcms) {
        this.baseCalculoIcms = baseCalculoIcms;
    }

    @Column(name = "valor_icms", precision = 17, scale = 17)
    public Double getValorIcms() {
        return this.valorIcms;
    }

    public void setValorIcms(Double valorIcms) {
        this.valorIcms = valorIcms;
    }

    @Column(name = "calculo_icms_substituicao", precision = 17, scale = 17)
    public Double getCalculoIcmsSubstituicao() {
        return this.calculoIcmsSubstituicao;
    }

    public void setCalculoIcmsSubstituicao(Double calculoIcmsSubstituicao) {
        this.calculoIcmsSubstituicao = calculoIcmsSubstituicao;
    }

    @Column(name = "valor_icms_substituicao", precision = 17, scale = 17)
    public Double getValorIcmsSubstituicao() {
        return this.valorIcmsSubstituicao;
    }

    public void setValorIcmsSubstituicao(Double valorIcmsSubstituicao) {
        this.valorIcmsSubstituicao = valorIcmsSubstituicao;
    }

    @Column(name = "valor_frete", precision = 17, scale = 17)
    public Double getValorFrete() {
        return this.valorFrete;
    }

    public void setValorFrete(Double valorFrete) {
        this.valorFrete = valorFrete;
    }

    @Column(name = "valor_seguro", precision = 17, scale = 17)
    public Double getValorSeguro() {
        return this.valorSeguro;
    }

    public void setValorSeguro(Double valorSeguro) {
        this.valorSeguro = valorSeguro;
    }

    @Column(name = "desconto", precision = 17, scale = 17)
    public Double getDesconto() {
        return this.desconto;
    }

    public void setDesconto(Double desconto) {
        this.desconto = desconto;
    }

    @Column(name = "outras_despesas", precision = 17, scale = 17)
    public Double getOutrasDespesas() {
        return this.outrasDespesas;
    }

    public void setOutrasDespesas(Double outrasDespesas) {
        this.outrasDespesas = outrasDespesas;
    }

    @Column(name = "valor_ipi", precision = 17, scale = 17)
    public Double getValorIpi() {
        return this.valorIpi;
    }

    public void setValorIpi(Double valorIpi) {
        this.valorIpi = valorIpi;
    }

    @Column(name = "total_produtos", precision = 17, scale = 17)
    public Double getTotalProdutos() {
        return this.totalProdutos;
    }

    public void setTotalProdutos(Double totalProdutos) {
        this.totalProdutos = totalProdutos;
    }

    @Column(name = "total_notas", precision = 17, scale = 17)
    public Double getTotalNotas() {
        return this.totalNotas;
    }

    public void setTotalNotas(Double totalNotas) {
        this.totalNotas = totalNotas;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "entrada")
    public List<DetalhamentoEntrada> getDetalhamentoEntradas() {
        return this.detalhamentoEntradas;
    }

    public void setDetalhamentoEntradas(List<DetalhamentoEntrada> detalhamentoEntradas) {
        this.detalhamentoEntradas = detalhamentoEntradas;
    }
}
